package rensoft.android.json;

import org.json.JSONException;

import java.util.Iterator;

import static rensoft.java.lang.Lang.error;

import rensoft.java.collections.GenericIterator;
import rensoft.java.json.JSONArray;
import rensoft.java.json.JSONContainer;
import rensoft.java.json.JSONType;
import rensoft.java.json.JSONTypeImpl;



public class JSONArrayImpl extends JSONTypeImpl implements JSONArray {

  private final org.json.JSONArray value;

  public JSONArrayImpl() {
    this(new org.json.JSONArray());
  }

  public JSONArrayImpl(org.json.JSONArray value) {
    super(value);
    this.value = value;
  }

  public void add(JSONType value) {
    set(getSize(), value);
  }

  @Override
  public JSONArray asArray() {
    return this;
  }

  @Override
  public JSONContainer asContainer() {
    return this;
  }

  public JSONType get(int index) {
    try {
      return JSONImpl.create(value.get(index));
    } catch (JSONException e) {
      error(e);
    }
    return null;
  }

  public int getSize() {
    return value.length();
  }

  public Iterator<JSONType> iterator() {
    return new GenericIterator<JSONType>(getSize()) {
      @Override
      protected JSONType getValue() {
        return get(getIndex());
      }
    };
  }

  public void set(int index, JSONType type) {
    try {
      value.put(index, type.getValue());
    } catch (JSONException e) {
      error(e);
    }
  }

}
